
#ifndef NOSAL_DEMO_SVC_SERVICE_H_
#define NOSAL_DEMO_SVC_SERVICE_H_

#include <string>

namespace netaos {
namespace nosal {
namespace demo {
namespace svc {

/// @brief Class Service.
class Service final {
  public:
    /// @brief Run executes a service
    static int Run(const char *name) noexcept;

  private:
    /// @brief The RunningStates enum represents possible platform execution
    /// states
    enum class RunningStates { kRunning, kOff };

    Service() = delete;
    Service(const Service &) = delete;
    Service &operator=(const Service &) = delete;

    /// @brief Constructor of Service instance.
    explicit Service(const char *name);

    /// @brief Initialize Service
    void Initialize();

    /// @brief Destructor of Service instance.
    ~Service();

    /// @brief Run the Service
    void Run();

    const std::string name_;
    RunningStates     running_state_;
};

}  // namespace svc
}  // namespace demo
}  // namespace nosal
}  // namespace netaos

#endif  // NOSAL_DEMO_SVC_SERVICE_H_
